package com.m4399.shortcut_test.core.helper

import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.os.Build
import android.os.Handler
import android.os.Looper
import android.util.Log
import com.m4399.shortcut_test.EmptyShortcutActivity
import com.m4399.shortcut_test.core.content.pm.ShortcutInfoCompat
import com.m4399.shortcut_test.core.content.pm.ShortcutManagerCompat
import com.m4399.shortcut_test.core.graphics.drawable.IconCompat
import com.m4399.shortcut_test.setting.ShortcutPermission
import com.wzw.shortcuthelper.core.helper.CreateOrUpdateShortcut
import com.wzw.shortcuthelper.core.helper.PermissionRequest
import java.util.*


object ShortcutHelper {

    const val TAG = "Shortcut"
    const val EXTRA_ID = "extra_id"
    const val EXTRA_LABEL = "extra_label"
    const val BROADCAST_ACTION = "com.m4399.shortcut.create"

    fun isSupport(context: Context): Boolean {
        return ShortcutManagerCompat.isRequestPinShortcutSupported(context)

    }

    private fun createShortcutInfoCompat(
        context: Context,
        gamePkgName: String,
        launcherActivity: String,
        bitmap: Bitmap?,
        label: String
    ): ShortcutInfoCompat {
        return ShortcutInfoCompat.Builder(context, gamePkgName).run {
            setShortLabel(label)
            setIcon(IconCompat.createWithBitmap(bitmap))
            val intentForShortcut = Intent(context, EmptyShortcutActivity::class.java)
            intentForShortcut.action = Intent.ACTION_VIEW
            intentForShortcut.putExtra("pkgName", gamePkgName)
            intentForShortcut.putExtra("activity", launcherActivity)
            setIntent(intentForShortcut)
            build()
        }
    }

    /**
     * 创建桌面快捷方式.
     * @param context [Context]
     * @param shortcutInfoCompat [ShortcutInfoCompat]
     * @param updateIfExit 如果桌面快捷方式存在，是否进行更新
     * @param fixHwOreo 是否适配华为Oreo，同名称不同id不能创建的问题
     * @param shortcutAction 回调方法
     */
    const val TEMP_SP_NAME = "temp"
    fun requestPinShortcut(
        context: Context,
        gamePkgName: String,
        launcherActivity: String,
        bitmap: Bitmap?,
        id: String,
        label: String
    ) {
//        if (!isSupport(context)) {
//            Log.d(TAG, "requestPinShortcut: 不支持快捷方式")
//            return
//
//        }

        //判断权限，有权限就继续，无权限返回由app控制打开设置还是取消此次操作

        when (ShortcutPermission.check(context)) {
            ShortcutPermission.PERMISSION_DENIED -> {
                Log.d(TAG, "permissionCheck: 没有权限,需要申请权限")

                PermissionRequest(context).start()

            }
            ShortcutPermission.PERMISSION_EXCEPTION -> {
                Log.d(TAG, "requestPinShortcut: vivo y3 系统bug")
                if (Build.MANUFACTURER.contains("vivo", true)) {
                    if (context.getSharedPreferences(TEMP_SP_NAME, Context.MODE_PRIVATE)
                            .getBoolean("vivo", false)
                    ) {
                        if (!CreateOrUpdateShortcut.isShortcutExit(context, id, label)) {
                            Log.d(TAG, "requestPinShortcut: 针对vivo手机权限打开bug问题特殊处理")
                            CreateOrUpdateShortcut.createOrUpdateShortcut(
                                context, createShortcutInfoCompat(
                                    context, gamePkgName, launcherActivity, bitmap, label
                                )
                            )
                            //如果用户没有打开开关，1s后再打开授权页面
                            Handler(Looper.myLooper()!!).postDelayed({
                                if (!CreateOrUpdateShortcut.isShortcutExit(context, id, label)) {
                                    Log.d(TAG, "requestPinShortcut: 如果用户没有打开开关，1s后再打开授权页面")
                                    //PermissionRequest(context).start()
                                }

                            }, 1000)
                        }
                    } else {
                        Log.d(TAG, "requestPinShortcut: 第一次需要申请")
                        PermissionRequest(context).start()
                    }
                }
                PermissionRequest(context).start()
            }
            else -> {
                Log.d(TAG, "permissionCheck: ${Build.MANUFACTURER} 有权限")

                CreateOrUpdateShortcut.createOrUpdateShortcut(
                    context, createShortcutInfoCompat(
                        context, gamePkgName, launcherActivity, bitmap, label
                    )
                )

                delay(200){
                    val shortcutExit = CreateOrUpdateShortcut.isShortcutExit(
                        context, gamePkgName, label
                    )
                    Log.d(TAG, "requestPinShortcut: 创建后查看是否创建成功 $shortcutExit")
                }
            }
        }

    }
    fun Any.delay(delayMillis: Long = 0, block: () -> Unit) {
        Handler(Looper.getMainLooper()).postDelayed({
            block()
        }, delayMillis)
    }

}